package com.tbit.uqbike.service.base;

import com.tbit.common.entity.GPS.CarHistory;
import com.tbit.uqbike.object.business.Point;
import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.statistics.ExportProhibitArea;

import java.util.List;

/**
 * 校准service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface CalibrateService {
    /**
     * 单个校准
     *
     * @param
     * @param mapType
     */
    void calibrateOffSet(TerPosition terPosition, int mapType);

    /**
     * 轨迹校准
     *
     * @param terPositions
     * @param mapType
     */
    void calibrateOffSet(List<TerPosition> terPositions, int mapType);

    /**
     * 停车点数据校准
     *
     * @param parkPoints
     * @param mapType
     */
    void celibrateParkPoint(List<ParkPoint> parkPoints, int mapType);

    /**
     * 分区点数据校准
     */
    void celibrateGeoRegion(List<GeoRegion> geoRegions, int mapType);

    /**
     * 停车点数据校准
     *
     * @param prohibitAreas
     * @param mapType
     */
    void celibrateProhibit(List<ProhibitArea> prohibitAreas, int mapType);

    /**
     * 停车点申请数据校准
     *
     * @param
     * @param mapType
     */
    void celibrateParkPointApply(List<ParkPointApply> parkPointApplys, int mapType);

    /**
     * 通用校准接口（原始坐标、百度坐标、谷歌坐标之间相互转换）
     *
     * @param point
     * @param from
     * @param to
     * @return
     */
    Point commonCalibrate(Point point, Integer from, Integer to);

    /**
     * 校准电子围栏
     *
     * @param geo
     * @param
     */
    void calGeo(Geo geo, Integer oriMapType, Integer targetMapType);

    /**
     * 校准垂直定位配置经纬度
     *
     * @param parkPointVert
     * @param
     */
    <T> void calVert(T parkPointVert, Integer oriMapType, Integer targetMapType);

    /**
     * 校准停车点
     *
     * @param parkPoint
     * @param oriMapType
     */
    void calParkPoint(ParkPoint parkPoint, Integer oriMapType, Integer targetMapType);

    /**
     * 校准
     *
     * @param lo
     * @param la
     * @param mapType
     * @return
     */
    Point calibrateOffSet(double lo, double la, int mapType);

    /**
     * 校准停车点
     *
     * @param prohibitArea
     * @param oriMapType
     */
    void calProhibitArea(ProhibitArea prohibitArea, Integer oriMapType, Integer targetMapType);

    /**
     * 校准停车点
     *
     * @param exportProhibitArea
     * @param mapType
     */
    void calProhibitArea(ExportProhibitArea exportProhibitArea, Integer mapType);

    /**
     * 经纬度校准并移除范围外的站点
     *
     * @param list
     * @param mapType
     * @param lat
     * @param lon
     * @param distance
     * @return
     */
    List<ParkPointApply> calibrateParkPointApplyAndRemove(List<ParkPointApply> list, Integer mapType, Double lat, Double lon, Integer distance);

    /**
     * 校准禁行区
     *
     * @param forbidden
     * @param fromMapType
     * @param toMapType
     * @param isSave
     */
    void calibrateForbidden(Forbidden forbidden, Integer fromMapType, Integer toMapType, boolean isSave);

    /**
     * 校准扣押区
     *
     * @param detentionArea
     * @param oriMapType
     */
    void calDetentionArea(DetentionArea detentionArea, Integer oriMapType, Integer targetMapType);

    //标准仓库
    void calibrateWareHouse(List<Warehouse> warehouses, int mapType);

    //标准仓库
    void calWarehouse(Warehouse warehouse, Integer oriMapType, Integer targetMapType);

    void calibrateWareHouseSin(Warehouse warehouses, int mapType);

    void calibrateGPSLastPos(List<CarHistory> carHistories, Integer mapType);

    void calibrateLastPos(List<AccountUserLastPos> accountUserLastPos, Integer mapType);
}